1. Introdução

O seguinte trabalho foi realizado para a disciplina Métodos Quantitativos Aplicados à Análise de Empresas, e tem como objetivo aplicar diferentes técnicas de Análise Multivariada de dados aprendidas durante o decorrer do curso.

Utilizamos duas linguagens de programação para a realização do trabalho (R e Python), além da linguagem markdown e html para a geração deste relatório.

Python foi utlizado primariamente para o tratamento dos dados, tendo sido aplicado a biblioteca pandas para leitura e manipulação do dataset para corrigir problemas como campos vazios. O resto do estudo foi realizado em R onde foi utilizado principalmente o psych, pacote especializado em análise multiváriada, para a geração das análises no relatório.

O dataset usado neste trabalho, Pokemon with stats, foi retirado do Kaggle e pode ser acessado pelo link: https://www.kaggle.com/-seabcsds/pokemon.

O conjunto de dados contém 800 observações, compostas por 13 variáveis, detalhadas a seguir.


1.1. Variáveis

# # ID do Pokemón no PokeDex
A Name Nome do Pokemón
A Type 1 Tipo do Pokemón
A Type 2 Outro tipo do Pokemón (se houver)
# Total Soma de Attack, Sp. Atk, Defense, Sp. Def, Speed e HP
# HP Hit Points (basicamente, pontos de vida)
# Attack Força de ataque
# Defense Força de defesa
# Sp. Atk Força do ataque especial
# Sp. Def Força da defesa especial
# Speed Velocidade
# Generation Número da geração
0/1 Legendary Verdadeiro se o Pokemón é lendário, falso se não é



1.2. Visão geral

As 5 primeiras observações do conjunto de dados podem ser analisadas a seguir:

X. Name Type.1 Type.2 Total HP Attack Defense Sp..Atk Sp..Def Speed Generation Legendary
1 Bulbasaur Grass Poison 318 45 49 49 65 65 45 1 False
2 Ivysaur Grass Poison 405 60 62 63 80 80 60 1 False
3 Venusaur Grass Poison 525 80 82 83 100 100 80 1 False
3 VenusaurMega Venusaur Grass Poison 625 80 100 123 122 120 80 1 False
4 Charmander Fire None 309 39 52 43 60 50 65 1 False
5 Charmeleon Fire None 405 58 64 58 80 65 80 1 False

É interessante notar que, apesar de termos 800 observações, não temos dados de 800 Pokemóns, mas sim de 721. Isso acontece porque existem edições diferentes do mesmo Pokemón, por exemplo, o Venusaur (linha 3) e o VenusaurMega Venusaur (linha 4) têm o mesmo ID, pois representam o mesmo Pokemón, mas cada um corresponde a uma edição diferente.

Também é relevante comentar que nem todos os Pokemóns possuem um segundo tipo (o Type 2), mas todos devem, necessariamente, ter pelo menos um tipo (o Type 1). Por isso, quando o Pokemón possui apenas o tipo 1, marcamos o tipo 2 como None.


1.3. Análise exploratória dos dados

Nesta seção, incluiremos histogramas e piecharts de cada variável, para termos uma visão geral de como os dados estão distribuídos em cada uma delas. As duas primeiras variáveis (# e Name) foram omitidas por conterem valores únicos para cada observação.































2. Aplicação de técnicas de Análise Multivariada

Nesta seção, aplicaremos de fato as técnicas de Análise Multivariada aprendidas em aula no nosso conjunto de dados.

2.1. Análise de Componentes Principais (PCA)

O principal objetivo da Análise de Componentes Principais, ou PCA (do inglês Principal Component Analysis), é reduzir a dimensionalidade de um conjunto de dados. Portanto, esta técnica pode dar indícios de que os dados podem ser explicados com um número menor de variáveis, o que auxilia na redução de redundâncias no conjunto de dados estudado. Além disso, o PCA pode ser usado para resolver o problema da multicolinearidade, que ocorre quando duas ou mais variáveis independentes possuem uma correlação linear alta, o que dificulta a aplicação de regressões.

A técnica constitui-se, basicamente, em tentar reescrever as variáveis existentes como combinações lineares de outras variáveis, para que todos os componentes resultantes sejam ortogonais, ou seja, possuam correlação igual a 0.

2.1.1. Funcionamento do PCA

O primeiro passo para a aplicação do PCA é a normalização dos dados, o que pode ser feito, por exemplo, calculando o z-score. Isso é necessário porque diferentes variáveis numéricas podem ter amplitudes muito diferentes, e a aplicação do PCA num conjunto de dados não normalizado pode resultar num modelo que prioriza certas variáveis independentes em detrimento de outras, mesmo que elas sejam igualmente importantes. Portanto, é necessário normalizar os dados, para que as variáveis fiquem todas na mesma escala.

Outra opção é utilizar a matriz de correlação, utilizando o coeficiente de correlação de Pearson, já que a correlação é uma versão normalizada da covariância. Neste caso, a normalização dos dados pode não ser feita.

Neste trabalho, utilizamos a matriz de correlação, e por isso não foi necessário normalizar os dados. Um coeficiente de correlação com módulo maior ou igual a 0.5 pode indicar que existem redundâncias entre o par de variáveis. Como a variável Total foi construída a partir da soma de todas as outras variáveis numéricas subsequentes (ou seja, foi construída como uma combinação linear de outras variávies), esperamos que ela possua os maiores coeficientes de correlação.

Para isso, observaremos a matriz de correlação a seguir:

Observando os resultados, notamos que os maiores coeficientes de correlação aparecem nos pares que contêm a variável Total, como era esperado, e o valor máximo está no par (Total, Sp..Atk). Entre os outros pares de variáveis, no entanto, não há nenhuma correlação notável.

Após a construção da matriz de correlação, o próximo passo é fazer a sua ortogonalização, e calcular os autovalores. A partir disso, é possível calcular os autovetores, que são os componentes principais propriamente ditos. O resultado da aplicação desta técnica, portanto, será um conjunto de vetores ortogonais entre si, ou seja, vetores independentes entre si, o que resolve o problema da multicolinearidade citado anteriormente.

2.1.2. Aplicação do PCA

Como o coeficiente de correlação de Pearson só pode ser aplicado a variáveis numéricas, criamos um subconjunto selecionando apenas as variáveis numéricas, como mostrado a seguir:

Total HP Attack Defense Sp..Atk Sp..Def Speed
318 45 49 49 65 65 45
405 60 62 63 80 80 60
525 80 82 83 100 100 80
625 80 100 123 122 120 80
309 39 52 43 60 50 65
405 58 64 58 80 65 80

Com isso, podemos aplicar a função princomp, cujo resultado é demonstrado a seguir:

pca = princomp(pcaData, cor = T, score = T)
summary(pca)
## Importance of components:
##                           Comp.1    Comp.2    Comp.3    Comp.4     Comp.5
## Standard deviation     1.9259990 1.0457585 0.8824929 0.8497669 0.65464504
## Proportion of Variance 0.5299246 0.1562301 0.1112562 0.1031577 0.06122288
## Cumulative Proportion  0.5299246 0.6861547 0.7974109 0.9005686 0.96179150
##                           Comp.6 Comp.7
## Standard deviation     0.5171649      0
## Proportion of Variance 0.0382085      0
## Cumulative Proportion  1.0000000      1

Já que nosso subconjunto de dados possui 7 variáveis, foram criados 7 componentes principais. O resumo desta técnica apresenta a importância de cada componente, ou seja, o quanto cada um dos componentes explica a variabilidade da população.

Como os componentes estão ordenados da maior para a menor proporção de variância, é interessante olhar para a proporção acumulada. Enquanto os 4 primeiros componentes explicam mais de 90% da variabilidade dos dados, os últimos 3 explicam, juntos, menos de 10%. Além disso, é interessante notar que o último componente, o Comp.7, explica 0% da variabilidade dos dados, ou seja, é o componente mais descartável de todos.

O gráfico a seguir deixa o conceito apresentado acima ainda mais claro:

A partir do componente 4, o restante dos componentes são descartáveis,pois a partir do quarto componente, mais de 90% da variância nos dados é já explicada. Seria possível utilizar, também, apenas os dois primeiros componentes, dependendo da aplicação, que já explicam 68% da variância, e a partir desse ponto é possível enxergar o “cotovelo” formado (ponto a partir do qual o ganho de variância com a adição de mais um componente se torna desprezível).

A primeira métrica citada, utilizada para manter os 4 primeiros componentes, é chamada de critério de variância explicada e é originada do campo de análise fatorial. Nessa métrica, se o número de componentes já é capaz de explicar uma certa porcentagem da variância em um certo conjunto de dados, isso já é considerado o sufuciente para se obter resultados válidos sobre o objeto de estudo. Nessa análise foi utilizado um minímo de 90% da variância explicada para selecionar os componentes, entretanto, uma porcentagem menor pode ser útilizada (e.g. Caso o objetivo seja parcimônia 50% já é o suficiente).

Abaixo, estão os autovalores encontrados (ou eigenvalues).

## Loading required package: ggplot2
## 
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
## 
##     %+%, alpha
## Welcome! Related Books: `Practical Guide To Cluster Analysis in R` at https://goo.gl/13EFCZ
eigenvalue variance.percent cumulative.variance.percent
Dim.1 3.7094722 52.992460 52.99246
Dim.2 1.0936108 15.623011 68.61547
Dim.3 0.7787937 11.125624 79.74109
Dim.4 0.7221037 10.315768 90.05686
Dim.5 0.4285601 6.122288 96.17915
Dim.6 0.2674595 3.820850 100.00000
Dim.7 0.0000000 0.000000 100.00000

Com essa observação dos autovalores é possível aplicar o Critério de Kaiser e considerar todos os componentes que possuem um autovalor menos do que 1 como descartáveis. Assim, obtendo a mesma conclusão que foi obtida com o scree plot, onde apenas os 2 primeiros componentes já seriam o suficiente.

É pertinente mostrar, também, o atributo do PCA chamado Loadings. Este atributo traz uma tabela que apresenta o quanto cada variável contribui na construção de cada um dos componentes. Nem sempre uma variável específica contribui significativamente em um componente, e por isso pode ser omitida, como a variável Total na maioria dos componentes.

## 
## Loadings:
##         Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
## Total    0.519                                     0.853
## HP       0.329         0.467 -0.730  0.219  0.227 -0.182
## Attack   0.378         0.593  0.389 -0.193 -0.513 -0.231
## Defense  0.313 -0.631         0.409         0.528 -0.222
## Sp..Atk  0.390  0.302 -0.309 -0.160 -0.737  0.196 -0.233
## Sp..Def  0.380 -0.243 -0.569 -0.196  0.298 -0.554 -0.198
## Speed    0.291  0.666         0.287  0.529  0.246 -0.207
## 
##                Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
## SS loadings     1.000  1.000  1.000  1.000  1.000  1.000  1.000
## Proportion Var  0.143  0.143  0.143  0.143  0.143  0.143  0.143
## Cumulative Var  0.143  0.286  0.429  0.571  0.714  0.857  1.000

Podemos notar que a variável que mais caracteriza o primeiro componente, que é também o que melhor explica, sozinho, os dados, é a variável Total, o que já era esperado, devido ao seu processo de construção. Além disso, ela é a que mais explica o último componente, que é também o mais descartável.

Abaixo, o gráfico biplot mostra a relação entre as antigas variávies e os dois componentes mais relevantes (o primeiro e o segundo).

O gráfico pode ser interpretado da seguinte forma: as setas indicam a “direção” para a qual cada variável se aproxima dos dois primeiros componentes principais, e também o sentido (se essa relação é positiva ou negativa). A variável Speed, por exemplo, é a que mais contribui positivamente na criação do segundo componente (no eixo y), mas a que menos contribui positivamente para o primeiro (no eixo x).


2.1.3. Interpretação dos componentes principais

Como é possível notar na tabela de loadings, cada componente recebe contribuições positivas ou negativas em diferentes magnitudes de cada variável. Com isso, é possível concluir que cada componente deve representar alguma característica sobre o objeto de estudo. Sabendo disso, atribuímos a eles “nomes” mais intuitivos para que a interpretação de cada componente seja facilitada.

  • Componente 1 - Poder Total
  • No primeiro componente pode ser observado que todas as variáveis possuem uma contribuição positiva para o componente. Além disso, a varíavel Total possui a maior contribução para esse componente, sendo que as outras variáveis têm aproximadamente a mesma contribuição. Logo, é possível concluir que a primeira componete representa o status geral do Pokemón no sentido de quão poderoso é o seu status no geral, sem se preocupar com algum arquetipo.

  • Componete 2 - Agressivo/defensivo
  • No segundo componente, as únicas variáveis com influência no componente são Defense, Sp..Def, Sp..Atk e Speed. Tanto Sp..Atk quanto Speed têm influências positivas, e as outras duas variáveis fornecem uma infuência negativa. Defense e Speed têm as maiores contribuções no componente. A partir disso, uma possível interpretação desse componete é em relação a como esse Pokemón tende a se colocar em batalha, semelhante a seu arquetipo. Um arquetipo agressivo, por exemplo, seria um Pokemón que tem muita velocidade, e com isso, uma tendência a atacar primeiro, tendo assim um Speed alto. Neste caso, seria interessante que ele também tivesse um bom ataque e. como as ações mais danosas vêm de habilidades, esse atributo seria controlado pelo Sp..Atk. Já para um arquetipo defensivo, normalmente o Pokemón teria uma boa defesa contra ataques normais e ataques com dano especial, ambos atributos controlados pelas variáveis Defense e Sp..Def, respectivamente.

  • Componete 3 - Tank de HP/Defesa especial
  • No componente em questão, foi possível observar que as variáveis mais importantes são HP e Sp..Def, HP com uma contribuição positiva e Sp..Def com uma contribuição negativa. Com isso em mente, é possível entender esse componete como uma análise de como um Pokemón lida com ataques de dano especial, ou seja, se é possível lidar com eles simplesmente possuindo muita vida (e neste caso cada ataque representa uma parte proporcionalemte menor de seu HP), ou possuindo muita Sp..Def, reduzindo o dano recebido pelos ataques e diminuindo o custo para a vida total do Pokemón.

  • Componete 4 - Tank de HP/Defesa
  • Neste componente, é possível observar que as váriaveis mais dominantes são HP e Defense. HP possui uma influência negativa, enquanto Defense possui uma influência positiva e ligeiramente menor que o HP. Devido a isso, é possível analisar que esse componente representa como um certo Pokemón lida para resistir a ataques. Um Pokemón com alto HP, por exemplo, não precisa de muita defesa, pois cada ataque afeta poporcionalmente uma parcela menor de sua vida total. Enquanto isso, para um Pokemón com menos vida, uma defesa maior é mais importante, pois com isso o dano de um ataque pode ser reduzido significativamente, e com isso, tornar uma perda de vida menos preocupante para sua performance.


Não foi possível “reescrever” o nome dos outros componentes, pois a sua interpretação ficaria muito subjetiva. Como sua importância é quase irrelevante, isso não afeta a interpretação do restante do trabalho.

2.1.4. Ortogonalidade dos componentes principais

Um fato interessante de ser observado é a comprovação de que os componentes principais são todos linearmente independentes, ou seja, são ortogonais. Para isso, plotaremos a matriz de correlação entre todos os componentes principais gerados pelo PCA:

Como esperado, todos os pares de componentes possuem correlação nula, ou seja, todos eles são linearmente independentes, ortogonais entre si. Assim, resolvemos o problema de multicolinearidade entre a variável Total e as outras variáveis numéricas apresentadas.